package com.lj.back.manage.scaffold.module.sys.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lj.back.manage.scaffold.common.DTO.PageQuery;
import com.lj.back.manage.scaffold.module.sys.DTO.SysRoleDTO;

import javax.validation.constraints.NotNull;
import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @author lv
 * @version 1.0.0
 */
public interface SysRoleService {
    /**
     * 根据用户获取角色列表
     * @param userId 用户ID
     * @return 角色列表
     */
    Set<SysRoleDTO> listRoleByUser(@NotNull(message = "{user.id.notnull}") Long userId);

    /**
     * 获取角色权限列表
     * @param roleId 角色ID
     * @return 权限列表
     */
    Set<String> listRolePermissions(Long roleId);

    /**
     * 给用户增加角色
     * @param roleId 角色ID
     * @param userId 用户ID
     * @return 受影响记录数
     */
    int addRoleToUser(@NotNull(message = "{role.id.notnull}") Long roleId,
                      @NotNull(message = "{user.id.notnull}") Long userId);

    /**
     * 获取所有角色信息
     * @return
     */
    LinkedHashSet<SysRoleDTO> listRoles();

    /**
     * 新增角色
     * @param sysRoleDTO
     * @return
     */
    Long addRole(SysRoleDTO sysRoleDTO);

    /**
     * 删除角色
     * @param roleId
     * @return
     */
    boolean removeRole(@NotNull(message = "{role.id.notnull}") Long roleId);

    /**
     * 获取角色详情
     * @param roleId
     * @return
     */
    SysRoleDTO getRoleInfo(@NotNull(message = "{role.id.notnull}") Long roleId);

    /**
     * 更新角色信息
     * @param sysRoleDTO
     * @return
     */
    boolean updateRole(SysRoleDTO sysRoleDTO);

    /**
     * 分页查询角色信息
     * @param pageQuery
     * @return
     */
    IPage<SysRoleDTO> listRoles(PageQuery pageQuery);
}
